package com.xiaode.util;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.xiaode.common.model.OrgClass;
import com.xiaode.common.model.OrgGrade;
import com.xiaode.common.model.dto.exportMember.StuUserInfoDTO;
import com.xiaode.common.model.dto.exportMember.TeacherAdminUserDTO;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class ImportUtil {

//    public static void checkStudentData(Object data, Integer index, List<String> list, int year, int month, HashMap<String, OrgGrade> gradeHashMap, Set<String> studentNumberSet, Boolean isUpdateExist, List<Student> students) {
//        JSON stuData = JSONUtil.parse(data);
//        Student student = new Student();
//        Object byPath = stuData.getByPath("0");
//        if (byPath == null) {
//            list.add("第" + index + "行,学籍号为空");
//            return;
//        }
//        String account = stuData.getByPath("0").toString();
//        if (account.length() != 19) {
//            list.add("第" + index + "行,学籍号:" + account + "长度必须为19位");
//            return;
//        }
//        if (studentNumberSet.contains(account) && !isUpdateExist) {
//            list.add("第" + index + "行,学籍号:" + account + "与已存储的学生学籍号一致");
//            return;
//        }
//        student.setAccount(account);
//        Object schoolYearObj = stuData.getByPath("1");
//        if (schoolYearObj == null) {
//            list.add("第" + index + "行,届别为空");
//            return;
//        }
//        String schoolYear = schoolYearObj.toString();
//        try {
//            int i = Integer.parseInt(schoolYear);
//        } catch (Exception e) {
//            list.add("第" + index + "行,届别:" + schoolYear + "必须为数字");
//            return;
//        }
//        student.setSchoolYear(schoolYear + "届");
//        if (month >= 8) {
//            student.setGrade(3 - (Integer.parseInt(schoolYear) - year + 1));
//        } else {
//            student.setGrade(3 - (Integer.parseInt(schoolYear) - year));
//        }
//        Object grade = stuData.getByPath("2");
//        String gradeName = null;
//        String cla = null;
//        if (grade == null) {
//            list.add("第" + index + "行,年级名称为空");
//            return;
//        }
//        gradeName = grade.toString();
//
//        Object clasName = stuData.getByPath("3");
//        if (clasName == null) {
//            list.add("第" + index + "行,班级名称为空");
//            return;
//        }
//        cla = clasName.toString();
//
//        OrgGrade orgGrade = gradeHashMap.get(gradeName);
//        if (orgGrade == null) {
//            list.add("第" + index + "行,年级与架构管理中名称不一致");
//            return;
//        }
//        Map<String, OrgClass> clasMap = orgGrade.get("clasMap");
//        OrgClass orgClass = clasMap.get(cla);
//        if (orgGrade == null) {
//            list.add("第" + index + "行,班级与架构管理中名称不一致");
//            return;
//        }
//        student.setClasId(orgClass.getId());
//
//
//        Object numberObj = stuData.getByPath("4");
//        if (numberObj == null) {
//            list.add("第" + index + "行,学号为空");
//            return;
//        }
//        student.setNumber(numberObj.toString());
//
//
//        Object name = stuData.getByPath("5");
//        if (name == null) {
//            list.add("第" + index + "行,学生姓名为空");
//            return;
//        }
//        student.setName(stuData.getByPath("5").toString());
//
//        Object sexObj = stuData.getByPath("6");
//        if (sexObj == null) {
//            list.add("第" + index + "行,学生性别为空");
//            return;
//        }
//        String sex = sexObj.toString();
//        if (!sex.equals("男") && !sex.equals("女")) {
//            list.add("第" + index + "行,学生性别必须为男/女");
//            return;
//        }
//        student.setSex("男".equals(sexObj.toString()) ? 1 : 2);
//        Object isManlandObj = stuData.getByPath("7");
//        if (isManlandObj == null) {
//            list.add("第" + index + "行,学生是否为内地新疆高中班为空");
//            return;
//        }
//        String isManland = isManlandObj.toString();
//        if (!isManland.equals("是") && !isManland.equals("否")) {
//            list.add("第" + index + "行,学生是否为内地新疆高中班为必须为是/否");
//            return;
//        }
//        student.setIsMainland("是".equals(isManlandObj.toString()));
//        student.setSalt(student.getAccount().substring(0, 3));
//        //密码加密
//        student.setIsDele(false);
//        student.setState(1);
//        //全部校验通过添加学生集合
//        students.add(student);
//    }


//    public static void checkTeacherData(Object data, Integer index, List<String> list, Set<String> accountSet, Map<String, Integer> roleMap, boolean isUpdateExist, List<Admin> admins) {
//        JSON teaData = JSONUtil.parse(data);
//        Admin admin = new Admin();
//        Object accountObj = teaData.getByPath("0");
//        if (accountObj == null) {
//            list.add("第" + index + "行,教师工号为空");
//            return;
//        }
//        String account = accountObj.toString();
//        if (account.length() < 6 || account.length() > 12) {
//            list.add("第" + index + "行,工号为:" + account + "教师工号长度需在6-12位之间");
//            return;
//        }
//        if (accountSet.contains(account) && !isUpdateExist) {
//            list.add("第" + index + "行,工号为:" + account + "教师工号与已经存储的工号相同");
//            return;
//        }
//
//        admin.setSalt(account.substring(0, 3));
//
//        admin.setAccount(account);
//        admin.setCanLoginApp(true);
//        admin.setIsDele(false);
//        Object nameObj = teaData.getByPath("1");
//        if (nameObj == null) {
//            list.add("第" + index + "行,教师姓名为空");
//            return;
//        }
//        String name = nameObj.toString();
//        if (name.length() > 20) {
//            list.add("第" + index + "行,姓名为:" + name + "教师姓名过长");
//            return;
//        }
//        admin.setName(name);
//        admin.setState(1);
//        Object roleObj = teaData.getByPath("2");
//        if (roleObj == null) {
//            list.add("第" + index + "行,教师角色为空");
//            return;
//        }
//        String roleName = roleObj.toString();
//        if (roleMap.get(roleName) == null) {
//            list.add("第" + index + "行,角色名称为:" + roleName + "与权限管理处的角色不一致,请核验角色名称");
//            return;
//        }
//
//        ArrayList<Integer> roleIdList = new ArrayList<>();
//        roleIdList.add(2);
//        if (roleMap.get(roleName) != 2) {
//            roleIdList.add(roleMap.get(roleName));
//        }
//        String s = JSONUtil.toJsonStr(roleIdList);
//        admin.setRoleIds(s);
//        admins.add(admin);
//    }
//

    //文件删除
    public static void delFile(File file) {
        //导入完成删除excel,判断路径是否存在
        if (file.exists()) {
            //boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件。
            if (file.isFile()) {
                file.delete();
            }
        }
    }

    public static void checkStuUserData(Object data, int index, ArrayList<String> errList, ArrayList<StuUserInfoDTO> list, Set<String> set, String orgCode, HashMap<String, OrgGrade> gradeHashMap) {
        JSON stuData = JSONUtil.parse(data);
        StuUserInfoDTO stuInfo = new StuUserInfoDTO();
        list.add(stuInfo);
        Object mobile = stuData.getByPath("0");
        if (BeanUtil.isEmpty(mobile)) {
            stuInfo.setMobil(null);
        } else {
            stuInfo.setMobil(mobile.toString());
        }
        Object number = stuData.getByPath("1");
        if (BeanUtil.isEmpty(number)) {
            stuInfo.setNumber(null);
        } else {
            stuInfo.setNumber(number.toString());
        }
        boolean add = set.add(number.toString());
        if (!add) {
            errList.add("第" + index + "行,学号与excel表中其他人学号重复!");
        }
        Object studentNo = stuData.getByPath("2");
        if (BeanUtil.isEmpty(studentNo)) {
            stuInfo.setStudentNo(null);
        } else {
            stuInfo.setStudentNo(studentNo.toString());
        }
        Object name = stuData.getByPath("3");
        if (BeanUtil.isEmpty(studentNo)) {
            errList.add("第" + index + "行,姓名为空!");
            return;
        }
        stuInfo.setName(name.toString());
        Object grade = stuData.getByPath("4");
        if (BeanUtil.isEmpty(grade)) {
            errList.add("第" + index + "行,年级为空!");
            return;
        }

        String gradeName = null;
        String cla = null;
        gradeName = grade.toString();

        Object clasName = stuData.getByPath("5");
        if (clasName == null) {
            errList.add("第" + index + "行,班级名称为空");
            return;
        }
        cla = clasName.toString();

        OrgGrade orgGrade = gradeHashMap.get(gradeName);
        if (orgGrade == null) {
            errList.add("第" + index + "行,年级与架构管理中名称不一致");
            return;
        }
        Map<String, OrgClass> clasMap = orgGrade.get("clasMap");
        OrgClass orgClass = clasMap.get(cla);
        if (orgClass == null) {
            errList.add("第" + index + "行,班级与架构管理中名称不一致");
            return;
        }
        stuInfo.setClasId(orgClass.getId());

//        stuInfo.setClasId(Integer.parseInt(stuData.getByPath("5").toString()));



        Object schoolYear = stuData.getByPath("6");
        if (BeanUtil.isEmpty(schoolYear)) {
            stuInfo.setSchoolYear(null);
        } else {
            stuInfo.setSchoolYear(schoolYear.toString());
        }
        Object isMainland = stuData.getByPath("7");
        if (BeanUtil.isEmpty(isMainland)) {
            errList.add("第" + index + "行,是否新疆内地高中生为空!");
            return;
        }
        try {
            stuInfo.setIsMainland(Integer.parseInt(isMainland.toString()));
        } catch (Exception e) {
            errList.add("第" + index + "行,是否新疆内地高中生格式不正确!");
            return;
        }
        Object gender = stuData.getByPath("8");
        if (BeanUtil.isEmpty(gender)) {
            stuInfo.setGender(0);
        } else {
            try {
                stuInfo.setGender(Integer.parseInt(gender.toString()));
            } catch (Exception e) {
                errList.add("第" + index + "行,性别格式不正确!");
                return;
            }
        }
        stuInfo.setOrgCode(orgCode);
    }

    /**
     * 导入教师/管理员
     *
     * @param data
     * @param index
     * @param errList
     * @param list
     */
    public static void checkTeacherAdminUserData(Object data, int index, ArrayList<String> errList, ArrayList<TeacherAdminUserDTO> list, Set<String> set) {
        JSON stuData = JSONUtil.parse(data);
        TeacherAdminUserDTO stuInfo = new TeacherAdminUserDTO();
        list.add(stuInfo);
        Object resignation = stuData.getByPath("4");
        if (BeanUtil.isEmpty(resignation) || "是".equals(resignation.toString())){
            return;
        }
        Object jobNum = stuData.getByPath("0");
        if (BeanUtil.isEmpty(jobNum)) {
            stuInfo.setJobNum(null);
        } else {
            boolean add = set.add(jobNum.toString());
            if (!add) {
                errList.add("第" + index + "行,工号与excel其他用户重复!");
            }
            stuInfo.setJobNum(jobNum.toString());
        }
        Object mobile = stuData.getByPath("1");
        if (BeanUtil.isEmpty(mobile)) {
            stuInfo.setMobile(null);
        } else {
            stuInfo.setMobile(mobile.toString());
        }
        Object name = stuData.getByPath("2");
        if (BeanUtil.isEmpty(name)) {
            errList.add("第" + index + "行,姓名为空!");
            return;
        }
        stuInfo.setName(name.toString());
        Object gender = stuData.getByPath("3");
        if (BeanUtil.isEmpty(gender)) {
            stuInfo.setGender(0);
        } else {
            try {
                stuInfo.setGender(Integer.parseInt(gender.toString()));
            } catch (Exception e) {
                errList.add("第" + index + "行,性别格式不正确!");
                return;
            }
        }
    }
}
